home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / ioblixdevkit / c / include / ioblix / uart.h < prev   
C/C++ Source or Header  |  1999-05-14  |  8KB  |  192 lines

  1. /*
  2. **      $VER: ioblix/uart.h 37.3 (7.4.99)
  3. **
  4. **      include file for access to IOBlix UARTs
  5. **
  6. **      (C) Copyright 1998,1999 Thore Böckelmann
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #ifndef IOBLIX_UART_H
  11. #define IOBLIX_UART_H 1
  12.  
  13. #define UART_RX             0
  14. #define UART_TX             0
  15. #define UART_DLL            0
  16. #define UART_IER            1
  17. #define UART_DLM            1
  18. #define UART_IIR            2
  19. #define UART_FCR            2
  20. #define UART_EFR            2
  21. #define UART_LCR            3
  22. #define UART_MCR            4
  23. #define UART_XON1           4
  24. #define UART_LSR            5
  25. #define UART_XON2           5
  26. #define UART_MSR            6
  27. #define UART_XOFF1          6
  28. #define UART_SCR            7
  29. #define UART_XOFF2          7
  30. #define UART_REG_COUNT      8
  31.  
  32. /*
  33.     The old static structures are now obsolete now and have been completely erased.
  34.     These new definitions allow a much more hardware independent way to access different,
  35.     but very similar chips (ie serial UARTs 16C650 and 16C654, which have the same registers,
  36.     but at different addresses.
  37. */
  38.  
  39. struct UARTRegisters {
  40.     ULONG ur_RegCount;
  41.     volatile UBYTE *ur_Regs[UART_REG_COUNT];
  42. };
  43.  
  44. #define ur_rx           ur_Regs[UART_RX]
  45. #define ur_tx           ur_Regs[UART_TX]
  46. #define ur_dll          ur_Regs[UART_DLL]
  47. #define ur_ier          ur_Regs[UART_IER]
  48. #define ur_dlm          ur_Regs[UART_DLM]
  49. #define ur_iir          ur_Regs[UART_IIR]
  50. #define ur_fcr          ur_Regs[UART_FCR]
  51. #define ur_efr          ur_Regs[UART_EFR]
  52. #define ur_lcr          ur_Regs[UART_LCR]
  53. #define ur_mcr          ur_Regs[UART_MCR]
  54. #define ur_xon1         ur_Regs[UART_XON1]
  55. #define ur_lsr          ur_Regs[UART_LSR]
  56. #define ur_xon2         ur_Regs[UART_XON2]
  57. #define ur_msr          ur_Regs[UART_MSR]
  58. #define ur_xoff1        ur_Regs[UART_XOFF1]
  59. #define ur_scr          ur_Regs[UART_SCR]
  60. #define ur_xoff2        ur_Regs[UART_XOFF2]
  61.  
  62. /*
  63.  * These are the definitions for the FIFO Control Register
  64.  * (16650 only)
  65.  */
  66. #define UART_FCR_ENABLE_FIFO    0x01 /* Enable the FIFO */
  67. #define UART_FCR_CLEAR_RCVR     0x02 /* Clear the RCVR FIFO */
  68. #define UART_FCR_CLEAR_XMIT     0x04 /* Clear the XMIT FIFO */
  69. #define UART_FCR_DMA_SELECT     0x08 /* For DMA applications */
  70. #define UART_FCR_TRIGGER_MASK   0xC0 /* Mask for the FIFO trigger range */
  71. #define UART_FCR_TRIGGER_1      0x00 /* Mask for trigger set at 1 */
  72. #define UART_FCR_TRIGGER_4      0x40 /* Mask for trigger set at 4 */
  73. #define UART_FCR_TRIGGER_8      0x80 /* Mask for trigger set at 8 */
  74. #define UART_FCR_TRIGGER_14     0xC0 /* Mask for trigger set at 14 */
  75. /* 16650A redefinitions */
  76. #define UART_FCR0_R_TRIGGER_8   0x00 /* Mask for receive trigger set at 8 */
  77. #define UART_FCR0_R_TRIGGER_16  0x40 /* Mask for receive trigger set at 16 */
  78. #define UART_FCR0_R_TRIGGER_24  0x80 /* Mask for receive trigger set at 24 */
  79. #define UART_FCR0_R_TRIGGER_28  0xC0 /* Mask for receive trigger set at 28 */
  80. #define UART_FCR0_T_TRIGGER_8   0x10 /* Mask for transmit trigger set at 8 */
  81. #define UART_FCR0_T_TRIGGER_16  0x00 /* Mask for transmit trigger set at 16 */
  82. #define UART_FCR0_T_TRIGGER_24  0x20 /* Mask for transmit trigger set at 24 */
  83. #define UART_FCR0_T_TRIGGER_30  0x30 /* Mask for transmit trigger set at 30 */
  84. /* 16654 redefinitions */
  85. #define UART_FCR4_R_TRIGGER_8   0x00 /* Mask for receive trigger set at 8 */
  86. #define UART_FCR4_R_TRIGGER_16  0x40 /* Mask for receive trigger set at 16 */
  87. #define UART_FCR4_R_TRIGGER_56  0x80 /* Mask for receive trigger set at 56 */
  88. #define UART_FCR4_R_TRIGGER_60  0xC0 /* Mask for receive trigger set at 60 */
  89. #define UART_FCR4_T_TRIGGER_8   0x00 /* Mask for transmit trigger set at 8 */
  90. #define UART_FCR4_T_TRIGGER_16  0x10 /* Mask for transmit trigger set at 16 */
  91. #define UART_FCR4_T_TRIGGER_32  0x20 /* Mask for transmit trigger set at 32 */
  92. #define UART_FCR4_T_TRIGGER_56  0x30 /* Mask for transmit trigger set at 56 */
  93. /* TI 16750 definitions */
  94. #define UART_FCR7_64BYTE        0x20 /* Go into 64 byte mode */
  95.  
  96. /*
  97.  * These are the definitions for the Line Control Register
  98.  *
  99.  * Note: if the word length is 5 bits (UART_LCR_WLEN5), then setting
  100.  * UART_LCR_STOP will select 1.5 stop bits, not 2 stop bits.
  101.  */
  102. #define UART_LCR_DLAB   0x80    /* Divisor latch access bit */
  103. #define UART_LCR_SBC    0x40    /* Set break control */
  104. #define UART_LCR_SPAR   0x20    /* Mark/Space parity select */
  105. #define UART_LCR_EPAR   0x10    /* Odd/Even parity select */
  106. #define UART_LCR_PARITY 0x08    /* Parity Enable */
  107. #define UART_LCR_STOP   0x04    /* Stop bits: 0=1 stop bit, 1= 2 stop bits */
  108. #define UART_LCR_WLEN5  0x00    /* Wordlength: 5 bits */
  109. #define UART_LCR_WLEN6  0x01    /* Wordlength: 6 bits */
  110. #define UART_LCR_WLEN7  0x02    /* Wordlength: 7 bits */
  111. #define UART_LCR_WLEN8  0x03    /* Wordlength: 8 bits */
  112.  
  113. /*
  114.  * These are the definitions for the Line Status Register
  115.  */
  116. #define UART_LSR_ERROR  0x80    /* Any error happend */
  117. #define UART_LSR_TEMT   0x40    /* Transmitter empty */
  118. #define UART_LSR_THRE   0x20    /* Transmit-hold-register empty */
  119. #define UART_LSR_BI     0x10    /* Break interrupt indicator */
  120. #define UART_LSR_FE     0x08    /* Frame error indicator */
  121. #define UART_LSR_PE     0x04    /* Parity error indicator */
  122. #define UART_LSR_OE     0x02    /* Overrun error indicator */
  123. #define UART_LSR_DR     0x01    /* Receiver data ready */
  124.  
  125. /*
  126.  * These are the definitions for the Interrupt Identification Register
  127.  */
  128. #define UART_IIR_NO_INT 0x01    /* No interrupts pending */
  129. #define UART_IIR_ID     0x06    /* Mask for the interrupt ID */
  130.  
  131. #define UART_IIR_MSI    0x00    /* Modem status interrupt */
  132. #define UART_IIR_THRI   0x02    /* Transmitter holding register empty */
  133. #define UART_IIR_RDI    0x04    /* Receiver data interrupt */
  134. #define UART_IIR_RLSI   0x06    /* Receiver line status interrupt */
  135. #define UART_IIR_XOFF   0x10    /* Xoff interrupt */
  136.  
  137. /*
  138.  * These are the definitions for the Interrupt Enable Register
  139.  */
  140. #define UART_IER_CTS    0x80    /* Enable Modem CTS interrupt */
  141. #define UART_IER_RTS    0x40    /* Enable Modem RTS interrupt */
  142. #define UART_IER_XOFF   0x20    /* Enable Modem Xoff interrupt */
  143. #define UART_IER_MSI    0x08    /* Enable Modem status interrupt */
  144. #define UART_IER_RLSI   0x04    /* Enable receiver line status interrupt */
  145. #define UART_IER_THRI   0x02    /* Enable Transmitter holding register int. */
  146. #define UART_IER_RDI    0x01    /* Enable receiver data interrupt */
  147. /*
  148.  * Sleep mode for ST16650 and TI16750.
  149.  * Note that for 16650, EFR-bit 4 must be selected as well.
  150.  */
  151. #define UART_IERX_SLEEP  0x10   /* Enable sleep mode */
  152.  
  153. /*
  154.  * These are the definitions for the Modem Control Register
  155.  */
  156. #define UART_MCR_CLOCK4 0x80    /* Clock division by 4 */
  157. #define UART_MCR_IRDA   0x40    /* IR enable */
  158. #define UART_MCR_IRQ    0x20    /* IRQ select, 16c650 only */
  159. #define UART_MCR_LOOP   0x10    /* Enable loopback test mode */
  160. #define UART_MCR_OUT2   0x08    /* Out2 complement */
  161. #define UART_MCR_OUT1   0x04    /* Out1 complement */
  162. #define UART_MCR_RTS    0x02    /* RTS complement */
  163. #define UART_MCR_DTR    0x01    /* DTR complement */
  164.  
  165. /*
  166.  * These are the definitions for the Modem Status Register
  167.  */
  168. #define UART_MSR_DCD    0x80    /* Data Carrier Detect */
  169. #define UART_MSR_RI     0x40    /* Ring Indicator */
  170. #define UART_MSR_DSR    0x20    /* Data Set Ready */
  171. #define UART_MSR_CTS    0x10    /* Clear to Send */
  172. #define UART_MSR_DDCD   0x08    /* Delta DCD */
  173. #define UART_MSR_TERI   0x04    /* Trailing edge ring indicator */
  174. #define UART_MSR_DDSR   0x02    /* Delta DSR */
  175. #define UART_MSR_DCTS   0x01    /* Delta CTS */
  176. #define UART_MSR_ANY_DELTA 0x0F /* Any of the delta bits! */
  177.  
  178. /*
  179.  * These are the definitions for the Extended Features Register
  180.  * (StarTech 16C660 only, when DLAB=1)
  181.  */
  182. #define UART_EFR_CTS    0x80    /* CTS flow control */
  183. #define UART_EFR_RTS    0x40    /* RTS flow control */
  184. #define UART_EFR_SCD    0x20    /* Special character detect */
  185. #define UART_EFR_ECB    0x10    /* Enhanced control bit */
  186. /*
  187.  * the low four bits control software flow control
  188.  */
  189.  
  190. #endif /* IOBLIX_UART_H */
  191.  
  192.